package Package.Reflection.GetsTheConstructorAndUses;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class GetsTheConstructorAndUses {
    public static void GetsTheConstructorAndUses() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//Class类获取构造方法对象的方法
//        方法名 说明
//Constructor<?>[] getConstructors() 返回所有公共构造方法对象的数组
        System.out.println("++++++++++++++++++++++++");
        Class<?> c = Class.forName("Package.Reflection.Bases.Student");
        Constructor<?>[] Cons = c.getDeclaredConstructors();
        for (Constructor con : Cons) {
            System.out.println(con);
        }
        System.out.println("+++++++++++++++++++++++");
//Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象的数组

//Constructor getConstructor(Class<?>... parameterTypes) 返回单个公共构造方法对象
        Class<?> d = Class.forName("Package.Reflection.Bases.Student");
        System.out.println(d);
        Class[] newClasss=null;
        Constructor<?> con=d.getConstructor();
        System.out.println(con);
//Constructor getDeclaredConstructor(Class<?>...parameterTypes) 返回单个构造方法对象
        //Constructor提供了一个类的单个构造函数的信息和访问权限
//T newInstance(Object... initargs) 使用由此 Constructor对象表示的构造函数，使用指定的初始化参数来创建和初始化构造函数的声明类的新实例
        Object obj = con.newInstance();
//        System.out.println(obj);

    }
}
